package 题目集.dfs.博弈论;

import java.util.Arrays;
import java.util.Scanner;

public class 取球游戏 {

    static int[] policy = new int[3];
    static int[] ns = new int[5];
    static byte[][][] dp;

    /**
     * 返回1表示先手输，返回2表示先手平局，返回3表示先手赢
     * @param n：剩余的球数。
     * @param self：自己拿的球数。
     * @param other：对方拿的球数。
     * @return
     */
    public static int first(int n, int self, int other) {
        if (dp[n][self][other] != 0) {
            return dp[n][self][other];
        }
        if (n == 0) {
            if (self % 2 == 0 && other % 2 != 0) {
                dp[n][self][other] = 1;
            } else if (self % 2 != 0 && other % 2 == 0) {
                dp[n][self][other] = 3;
            } else {
                dp[n][self][other] = 2;
            }
            return dp[n][self][other];
        }
        for (int i : policy) {
            if (n - i < 0) continue;
            if (first(n - i, other, self + i) == 1) {   //对方先手必输的情况下，自己先手必赢。
                return dp[n][self][other] = 3;
            }
        }
        for (int i : policy) {
            if (n - i < 0) continue;
            if (first(n - i, other, self + i) == 2) {   //追平
                return dp[n][self][other] = 2;
            }
        }
        return dp[n][self][other] = 1;
    }

//    public static int dpFun(int n) {
//        byte[][][] dp = new byte[4][n + 1][n + 1];  //第一维表示n，第二维表示自己拿的球数，第三维表示对方拿的球数。
//        for (int i = 0; i < dp[0].length; i++) {
//            for (int j = 0; j < dp[0][0].length; j++) {
//                if (i % 2 == 0 && j % 2 != 0) {   //先手必输:0
////                    dp[0][i][j] = 1;
//                } else if (i % 2 != 0 && j % 2 == 0) {
//                    dp[0][i][j] = 3;
//                } else {
//                    dp[0][i][j] = 2;
//                }
//            }
//        }
//        for (int i = 1; i <= n; i++) {
//            for (int j = 0; j <= n; j++) {
//                for (int k = 0; k <= n; k++) {
//                    boolean flag = false;
//                    for (int q = 1; q <= 3; q++) {
//                        if (j - policy[q - 1] < 0) break;   //剩余球数不够拿
//                        if (dp[(i - q + 4) % 4][k][j - policy[q]] == 0) {
//                            dp[i % 4][j][k] = 3;
//                            flag = true;
//                            break;
//                        }
//                    }
//                    if (flag) continue;
//                    for (int q = 1; q <= 3; q++) {
//                        if (j - policy[q - 1] < 0) break;   //剩余球数不够拿
//                        if (dp[(i - q + 4) % 4][k][j - policy[q]] == 2) {
//                            dp[i % 4][j][k] = 2;
//                            flag = true;
//                            break;
//                        }
//                    }
//                    if (flag) continue;
//                    dp[i % 4][j][k] = 0;
//                }
//            }
//        }
//        return dp[n % 4][n][0];
//    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < policy.length; i++) {
            policy[i] = sc.nextInt();
        }
        Arrays.sort(policy);
        for (int i = 0; i < ns.length; i++) {
            ns[i] = sc.nextInt();
            dp = new byte[ns[i] + 1][ns[i] + 1][ns[i] + 1];
            int first = first(ns[i], 0, 0);
            switch (first) {
                case 3:
                    System.out.println("+");
                    break;
                case 2:
                    System.out.println("0");
                    break;
                case 1:
                    System.out.println("-");
                    break;
            }
        }
    }
}
